package com.cn.algorithm02.class02;

import com.cn.algorithm02.class01.CodeUtil;

/**
 * 查找局部最小值，找出一个即可
 * 任意两个数不相等
 */
public class C05_MinVal {

    public static void main(String[] args) {
        int[] arr = CodeUtil.generatorArray();
//        int[] arr = {1, 0, 0, 1};
        System.out.println("min value index: " + process(arr));


    }

    public static int process(int[] arr) {
        if (arr == null || arr.length == 1) return -1;
        // 至少两个数
        if (arr[0] < arr[1]) {
            return 0;
        } else if (arr[arr.length - 2] > arr[arr.length - 1]) {
            return arr.length - 1;
        }

        // 至少三个数
        int L = 1;
        int R = arr.length - 2;
        while (L < R) {
            int mid = L + ((R-L)>>1);
            if (arr[mid] < arr[mid - 1] && arr[mid] < arr[mid +1]) {
                return mid;
            } /*else if (arr[mid] > arr[mid - 1] && arr[mid] < arr[mid + 1]) {
                R = mid;
            } */else if (arr[mid] < arr[mid - 1] && arr[mid] > arr[mid + 1]) {
                L = mid;
            } else {
                R = mid;
            }
        }
        if (arr[L] < arr[L - 1] && arr[L] < arr[L +1]){
            return L;
        }
        return -1;
    }
}
